package com.yxjme.opengl_0;

import android.content.Context;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

/**
 * 渲染器
 */
public class MyRender implements GLSurfaceView.Renderer {

    private Context context ;

    public MyRender(Context context){
        this.context = context ;
    }


    @Override
    public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
        /*填充颜色*/
        GLES20.glClearColor(0.0f,55.0f,110,0.0f);
    }


    @Override
    public void onSurfaceChanged(GL10 gl10, int i, int i1) {
        /*窗口大小*/
        GLES20.glViewport(0,0,i,i1);
    }


    @Override
    public void onDrawFrame(GL10 gl10) {
        /*清空屏幕*/
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

        initShader();
    }




    public void initShader(){
        //编译着色器源码
        int mVertexshader = ShaderHelper.compileVertexShader(Util.readTextFileFromResource(context,"vertex_shader"));
        int mFragmentshader = ShaderHelper.compileFragmentShader(Util.readTextFileFromResource(context,"fragment_shader"));
        /*创建连接*/
        int program = ShaderHelper.linkProgram(mVertexshader,mFragmentshader);
        /*验证*/
        if (ShaderHelper.volidateProgram(program)){
            //使用程序
            GLES20.glUseProgram(program);
        }
        //点位置着色器
        int a_position = GLES20.glGetAttribLocation(program, "a_Position");
        /*片段着色器*/
        int u_color = GLES20.glGetUniformLocation(program, "u_Color");
        //获取属性的位置
        GLES20.glGetAttribLocation(program, "a_Position");
        //将点点坐标装换成OpenGL可以识别
        FloatBuffer verticeData = Util.toFloatBuffer(tableVertices);
        //将着色器加载到帧缓冲区
        GLES20.glVertexAttribPointer(a_position, 2, GLES20.GL_FLOAT, false, 0, verticeData);
        //使用顶点
        GLES20.glEnableVertexAttribArray(a_position);
        //指定着色器u_color的颜色为白色
        GLES20.glUniform4f(u_color, 1.0f, 0.0f, 0.0f, 1.0f);
        /**
         * 第一个参数：绘制绘制三角形
         * 第二个参数：从顶点数组0索引开始读
         * 第三个参数：读入6个顶点
         *
         * 最终绘制俩个三角形，组成矩形
         */
        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 6);


        /*更新绘制颜色值*/
        GLES20.glUniform4f(u_color, 0.0f, 0.0f, 0.0f, 1.0f);
        //绘制分割线
        GLES20.glDrawArrays(GLES20.GL_LINES, 6, 2);

        //绘制点
        /*更新绘制颜色值*/
        GLES20.glUniform4f(u_color, 0.0f, 0.0f, 0.0f, 1.0f);
        GLES20.glDrawArrays(GLES20.GL_POINTS, 8, 1);

        /*更新绘制颜色值*/
        GLES20.glUniform4f(u_color, 0.0f, 0.0f, 0.0f, 1.0f);
        GLES20.glDrawArrays(GLES20.GL_POINTS, 9, 1);

    }


    /**
     * 逆时针绘制三角形
     */
    private float[] tableVertices = {
            //第一个三角
            -0.5f, -0.5f,
            0.5f, 0.5f,
            -0.5f, 0.5f,
            //第二个三角
            -0.5f,-0.5f,
            0.5f, -0.5f,
            0.5f, 0.5f,
            //线
            -0.5f, 0f,
            0.5f, 0f,
            //点
            0.0f, -0.25f,
            0.0f, 0.25f
    };


}
